iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
自我挑戰組

從0到有學習JavaScript系列 第 3

第三章 型別、值和變數-問題筆記 toFixed

  • 分享至 

  • xImage
  •  

JavaScript型別分成這幾大類:

  • 原始型別 (primitive types):數字(number)、字串(string)、布林(Boolean)、null、undefined.
  • 物件型別 (object types): 非原始型別都屬於物件。
  • 符號 (symbol): ES6新增的特殊型別

問題一:物件的無序群集 (unordered collection)是什麼?

問題二:什麼是Set物件、Map物件、RegExp型別、Date型別、Error及子型別?

物件型別是可變的 (mutable);原始型別是不可變的 (immutable)。

問題三、在JavaScript中,定義Math物件支援數學運算,是什麼?
在初學習JavaScript時,一開始比較常用到Math.floor (無條件捨去) 以及Math.random (隨機取一個小於一的數字)的方法。

  • Math.floor (無條件捨去)
console.log(Math.floor(5.95));
// Expected output: 5
  • Math.random (隨機取一個小於1的數字)
console.log(Math.random());   //Expected output: 0.6088877637710861

練習寫出樂透機時常使用Math.floor加上Math.random來取一個1-50之間的隨機整數:

let answer = Math.floor(Math.random() * 49) + 1;  // 隨機產生一個1-50之間的整數
console.log(answer);

問題四、四捨五入為何盡量不要使用toFixed?
四捨五入,建議使用Math.round、Math.ceil或是Math.floor,會比toFixed來的正確。
Math.round(四捨五入):

console.log(Math.round(-20.51));  //Expected output:21
console.log(Math.round(-20.5));   //Expected output:20
console.log(Math.round(20.5));    //Expected output:21
console.log(Math.round(20.49));   //Expected output:20

因為toFixed使用的是銀行家捨入法 ,並非一般人認知的四捨五入。
銀行家捨入法口訣:四捨六入五考慮、五後非零就進一、五後為零看奇偶、五前為偶應捨去、五前為奇要進一。

使用toFixed正常狀況:

const answer = 12345.6789
answer.toFixed();   //Expected output:  '12346' 型別為字串
answer.toFixed(1);  //Expected output:  '12345.7'
answer.toFixed(2);  //Expected output:  '12345.68'

toFixed不正常狀況:

const answer = 0.015;
answer.toFixed(2);  //不正常,小數點後第2位四捨五入 結果為 0.01

const answer6 = 0.0155;
console.log(answer6.toFixed(3)); //不正常,小數點後第3位四捨五入 結果為 0.015

Reference:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor
JS toFixed(银行家舍入法)及其缺陷和解决方法_js的tofix 银行家算法_普通网友的博客-CSDN博客


上一篇
第二章 語彙結構-問題筆記
下一篇
第三章 型別、值和變數 問題筆記 Date
系列文
從0到有學習JavaScript31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言